module ram
 #( parameter ADDR_WIDTH = 16,
    parameter DATA_SIZE = 16 )
     (
    input WE,
    input [ADDR_WIDTH-1 : 0] ADDR,
    input [DATA_SIZE-1 : 0] DATA_IN,
    output reg [DATA_SIZE-1 : 0] DATA_OUT
);

parameter MEM_DEPTH = 1 << ADDR_WIDTH;

reg [DATA_SIZE-1 : 0] MEM [0:MEM_DEPTH-1];

// synopsys_translate_off
integer i;
initial begin
    for(i=0;i<=MEM_DEPTH-1;i=i+1) begin
        MEM [i] =16'b0;
    end
end
// synopsys_translate_off

always @(*) begin
    if (WE) begin
         MEM[ADDR] = DATA_IN;
    end
    else DATA_OUT = MEM[ADDR] ;
end

endmodule
